package reflect;

import java.lang.reflect.Method;
import java.util.Scanner;

public class ReflectDemo4 {
    public static void main(String[] args) throws Exception{
        Person p=new Person();
        p.sayHello();
        //反射机制实例化对象
        Class cls =Class.forName("reflect.Person");
        Object obj =cls.newInstance();
        //反射机制调用方法
        //通过类对象获取要调用的方法
        Method method =cls.getMethod("sayHello");
        //invoke用来执行该方法,参数1为该方法的所属对象
        method.invoke(obj);//obj.sayHello();

        Method method1=cls.getMethod("getName");
        //如果实际方法有返回值，那么invoke的返回值就是实际调用该方法的返回值
        Object returnValue = method1.invoke(obj);
        System.out.println("返回值："+returnValue);

        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入类名： ");
        String className=scanner.nextLine();
        System.out.println("请输入方法名");
        String methodName=scanner.nextLine();
        Class cls2 =Class.forName(className);
        Object o =cls2.newInstance();
        Method method2=cls2.getMethod(methodName);
        method2.invoke(o);
    }
}